package com.hua.Springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT) //实现动态刷新 要与配置文件的refresh=true一起使用
/*
* proxyMode = ScopedProxyMode.DEFAULT解释： 不加在controller获取时会获取null值
* 这个注解的proxyMode默认值是ScopedProxyMode.TARGET_CLASS，这个代理

    模式使用的是CGLIB方式。如果@RefreshScope使用在@Controller(不止这一个)标记的类上就会出现注入null值的问题。
*   @RefreshScope只要是用在其他会被spring使用CGLIB代理的类上就会出问题。原因是@RefreshScope默认使用CGLIB代理，
*   而目标类又是被CGLIB代理过的，这样就被代理了两次，第二次也就是@RefreshScope代理的时候会出现属性丢失的问题

* */
public class TestController {
    @Value("${server.port}")
    private String port;
    @Value("${config.info}")
    private String configInfo;
    @Value("${spring.application.name}")
    private String name;
    @GetMapping("/getInfo/{id}")
    private String getInfo(@PathVariable("id") int id){
        return "从"+name+"拿到的配置文件，端口号为:"+port+"内容内"+configInfo+"测试编号："+id;
    }
}
